package org.mendoza.salud.hvt.ui.cruds;

import com.vaadin.cdi.CDIView;
import com.vaadin.data.Property;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.shared.ui.combobox.FilteringMode;
import com.vaadin.ui.*;
import org.mendoza.salud.hvt.model.global.Pais;
import org.mendoza.salud.hvt.model.global.TipoDeDocumento;
import org.mendoza.salud.hvt.services.global.GeoServiceBean;
import org.mendoza.salud.hvt.services.global.PersonaServiceBean;
import org.mendoza.salud.hvt.ui.mywidgets.MyBeanItemContainer;

import javax.ejb.EJB;
import javax.inject.Inject;
import java.util.List;

/**
 * Created by administrador on 02/03/15.
 */
@CDIView("TipoDeDocumentoView")
public class TipoDeDocumentoCrud extends CustomComponent implements View {
    @EJB
    GeoServiceBean geoServiceBean;
    @EJB
    PersonaServiceBean personaServiceBean;

    Table listadoTDDs;
    TipoDeDocumento tipoDeDocumento;

    @Override
    public void enter(ViewChangeListener.ViewChangeEvent viewChangeEvent) {
        VerticalLayout layout = new VerticalLayout();
        setCompositionRoot(layout);

        BeanItemContainer<Pais> paisItemContainer = new BeanItemContainer<Pais>(Pais.class);
        paisItemContainer.addAll(geoServiceBean.getAllPaises());
        final ComboBox comboTddPaises = new ComboBox();
        comboTddPaises.setContainerDataSource(paisItemContainer);
        comboTddPaises.setItemCaptionPropertyId("nombre");
        comboTddPaises.setFilteringMode(FilteringMode.CONTAINS);

        final TextField textTddDescripcion = new TextField("Descripcion");
        final TextField textTddSigla = new TextField("Sigla");

        Button buttonGuardar = new Button("Guardar");


        layout.addComponent(comboTddPaises);
        layout.addComponent(textTddDescripcion);
        layout.addComponent(textTddSigla);
        layout.addComponent(buttonGuardar);

        listadoTDDs = new Table("Listado de Tipos de Documento");
        listadoTDDs.setSelectable(true);
        listadoTDDs.setImmediate(true);

        layout.addComponent(listadoTDDs);

        refrescarListado();


        buttonGuardar.addClickListener(new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent clickEvent) {
                if (tipoDeDocumento == null) {
                    tipoDeDocumento = new TipoDeDocumento();
                }
                tipoDeDocumento.setPais((Pais) comboTddPaises.getValue());
                tipoDeDocumento.setDescripcion(textTddDescripcion.getValue());
                tipoDeDocumento.setSigla(textTddSigla.getValue());

                if (tipoDeDocumento.getId() == null) {
                    personaServiceBean.persistTipoDeDocumento(tipoDeDocumento);
                } else {
                    personaServiceBean.mergeTipoDeDocumento(tipoDeDocumento);
                }
                refrescarListado();
            }
        });

        listadoTDDs.addValueChangeListener(new Property.ValueChangeListener() {
            @Override
            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
                tipoDeDocumento = (TipoDeDocumento) listadoTDDs.getValue();
                comboTddPaises.select(tipoDeDocumento.getPais());
                textTddDescripcion.setValue(tipoDeDocumento.getDescripcion());
                textTddSigla.setValue(tipoDeDocumento.getSigla());
            }
        });
    }

    private void refrescarListado() {
        List<TipoDeDocumento> listTDDs = personaServiceBean.getAllTipoDeDocumento();
        MyBeanItemContainer<TipoDeDocumento> container = new MyBeanItemContainer<TipoDeDocumento>(TipoDeDocumento.class);
        container.addAll(listTDDs);
        listadoTDDs.setContainerDataSource(container);
    }
}
